package online.foxnull2.foxmall.product.exception;

import lombok.extern.slf4j.Slf4j;
import online.foxnull2.common.exception.BizCodeEnum;
import online.foxnull2.common.utils.R;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.LinkedHashMap;
import java.util.Map;

@Slf4j
@RestControllerAdvice(basePackages = "online.foxnull2.foxmall.product.controller")
public class ProductControllerExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public R methodArgumentNotValidException(MethodArgumentNotValidException e) {
        log.error("ex msg: {}, ex type: {}", e.getMessage(), e.getClass());
        Map<String, String> map = new LinkedHashMap<>();
        e.getBindingResult().getFieldErrors().forEach(item -> map.put(item.getField(), item.getDefaultMessage()));
        return R.error(BizCodeEnum.VALID_EXCEPTION.getCode(), BizCodeEnum.VALID_EXCEPTION.getMsg()).put("data", map);
    }

    @ExceptionHandler(Throwable.class)
    public R throwableHandler(Throwable t) {
        log.error("ex msg: {}, ex type: {}", t.getMessage(), t.getClass());
        t.printStackTrace();
        return R.error(BizCodeEnum.UNKNOWN_EXCEPTION.getCode(), BizCodeEnum.UNKNOWN_EXCEPTION.getMsg()).put("data", t);
    }
}
